==Отладка и тест игры==

Для отладки и возможности тестировать игру были введены некоторые дополнения.

=Отладчик=

Отладчик предназначен для быстрой отладки игры. Реализван через служебную локацию - обработчик строки ввода. Эта локация носит имя 'uc'.

В поле ввода можно вводить следующие команды:

pNNN
	, где вместо NNN указывается число. Команда осуществляет переход на локацию 'page.NNN'.

oNNN
	, где вместо NNN указывается число. Команда, по которой производится вывод информации об объекте, стоящем в таблице объектов в строке номер NNN. Иными словами выводится содержимое следующих переменных:

	$id_array[NNN]
	$object_array[NNN]
	$position_array[NNN]
	kolvo_array[NNN]
	charge_array[NNN]
	$run_array[NNN]

log

	команда выводит содержимое массива $log_error.

Все прочие значения, вводимые в строку ввода, считаются обыкновенным кодом, готовым к исполнению. Таким образом можно выводить значение переменных на экран, или производить другие текущие манипуляции с переменными и информацией на экране. Например:

$print
	
	вывод содержимого переменной '$print'.

$print='Привет, мир'

	присвоение значения переменной '$print'.

В случае, когда на экран необходимо вывести содержимое не отдельной переменной, а целого массива, используется ключ '/a':

$print/a

	вывод содержимого массива '$print'.

=Вывод таблицы объектов=

Если вы не знаете, что такое таблица объектов, обратитесь к разделу "Объекты и их обработчики".

Для вывода таблицы объектов в удобном и понятном виде - была написана функция 'uc.obj'. При вызове этой функции создаётся html-таблица, в которой прописываются все объекты игры. Чтобы вывести таблицу на экран, достаточно ввести в строку ввода команду вызова этой функции:

$func('uc.obj')

=Бесконечный рюкзак=

Чтобы снять ограничения для обработчика и тестера на количество предметов в рюкзаке, была усовершенствована процедура подъёма предметов с локации. Теперь, если переменной $GAME_VALUE['endlessbag'] возвращено значение 'true', всякий раз при подъёме предмета с локации, если в рюкзаке уже не осталось места, будет добавляться одно свободное место в рюкзак. Таким образом можно наполнять рюкзак бесконечным числом предметов. По умолчанию такая возможность отключена. Чтобы включить её, необходимо в строке ввода ввести следующее:

$GAME_VALUE['endlessbag']='true'

=Все предметы=

Необходимость перескакивать с одной локации на другую в поисках нужного предмета сильно осложняет тест и отладку игры. Поэтому была создана локация 'page.999', где можно создать любой из существующих в игре предметов. Чтобы перейти на эту локацию, достаточно ввести в строку ввода следующую команду:

p999

или же воспользоваться стандартной командой перехода для QSP:

goto 'page.999'

=Управление логом боя=

Для того, чтобы не читать всякий раз простыни текста, была предусмотрена возможность вывода конечного числа сообщений лога боя. Этот параметр указывается в переменной GAME_VALUE['war.log']. Если значение переменной больше нуля, будут выводиться только последние сообщения лога. Число сообщений лога равно значению этой переменной. Пример:

GAME_VALUE['war.log']=3

будет выводить три последних сообщения лога.

=Цвет гиперссылок=

Если гиперссылки тяжело читаются, вы можете изменить их цвет следующим образом. Введите в строку ввода следующую команду:

GAME_INTERFACE['href.color']=rgb(000,111,222) & goto '$curloc'

, где 000 - красная составляющая цвета в системе RGB (десятеричное число от 0 до 255), 111 - зелёная составляющая цвета в системе RGB (десятеричное число от 0 до 255), 222 - синяя составляющая цвета в системе RGB (десятеричное число от 0 до 255).

=Системные переменные игры=

$GAME_VALUE['save.reserve']
	значения:
		'true' (по умолчанию может быть пустым значением) - вкупе с быстрым сохранением и чекпоинтом создаются дополнительные "резервные файлы сохранений"

		'false' - при быстром сохранении и в чекпоинт не создаются дополнительные файлы сохранений

$GAME_VALUE['interface]
	значения:
		пустое - по умолчанию. На экран выводится только текст описания локации без статистики и предметов в инвентаре

		'[game]' - на экран выводится описание, а также статы и предметы в инвентаре.

$GAME_VALUE['endlessbag']
	значения:
		'false' (по умолчанию может быть пустым значением) - рюкзак ограничен шестью ячейками. Если рюкзак выбросить, в него нельзя будет помещать предметы.

		'true' - рюкзак не ограничен. Ячейки добавляются автоматически при поднятии большего количества предметов.

$GAME_VALUE['приём лекарства']
	значения:
		'запрещён' (по умолчанию может быть пустым значением) - нельзя употреблять лекарственные средства (по правилам игры лекарственные средства можно употреблять лишь сразу после битвы).

		'разрешён' - разрешено употребить лекарственное средство.

GAME_VALUE['war.log']
	в значении этой переменной указывается, сколько последних строк из лога сражения следует выводить на экран. По умолчанию 0 - выводится весь лог с первой по последнюю строки.

$GAME_VALUE['power.lose']
	значения:
		'poweroff' - герой потерял всё здоровье в сражении с противником. Если переменная приняла это значение, на экран не выводятся статы и предметы.

$GAME_VALUE['game.cubes.result']
	используется для организации игры в кости. Принимает значения:
		'win' - герой выиграл.
		'lose' - герой проиграл.

GAME_VALUE['game.cubes.party']
	подсчитывает количество сыграных партий в игре в кости

$GAME_VALUE['obj.inGame']
	используется для сохранения ставки при игре в кости.

$GAME_VALUE['фиксация страницы']
	используется для фиксации номера страницы при постраничном выводе на локации.

GAME_VALUE['page.228']
	используется для сохранения штрафа к ловкости при переходе между локациями.

GAME_INTERFACE['href.color']
	используется для сохранения настроек интерфейса. Цвет гиперссылок

$GAME_INTERFACE['stat']
	значения:
		'hide' (по умолчанию может быть пустое значение) - окно дополнительного описания не отображается на экране.

		'show' - окно дополнительного описания отображается на экране

$GAME_INTERFACE['objs']
	значения:
		'hide' (по умолчанию может быть пустое значение) - окно инвентаря не отображается на экране.

		'show' - окно инвентаря отображается на экране

$GAME_INTERFACE['back.href']
	значения:
		'false' (по умолчанию может быть пустое значение) - кнопка отката не отображается на экране

		'true' - кнопка отката отображается на экране

$GAME_INTERFACE['next.href']
	значения:
		'false' (по умолчанию может быть пустое значение) - на экране отображаются кнопки настроек и сохраения.

		'true' - на экране отображается кнопка пролистывания страниц вперёд по одной.

$GAME_INTERFACE['refresh']
	значения:
		пустое - принудительного обновления настроек экрана не будет.

		'страница.сброс' - принудительное обновление настроек экарна.
GAME_INTERFACE['href.color']
	значения:
		число - числовое выражение цвета.

=Переменные среды=

В игре используются следующие системные переменные плеера, которые в данном случае я называю переменными среды:

	$fname
		-	изменяется на локации set.Screen. Принимает значения 'Comic Sans MS' и 'Consolas'. Управляет шрифтом отображаемого на экране текста.

	fcolor
		-	изменяется на локации set.Screen. Управляет цветом шрифта отображаемого на экране текста

	bcolor
		-	изменяется на локации set.Screen. Управляет цветом фона.

	lcolor
		-	изменяется на локации set.Screen. Управляет цветом отображаемых на экране гиперссылок

	usehtml
		-	устанваливается на стартовой локации в значение 1. Включает распознавание html-разметки плеером.

	debug
		-	устанавливается на стартовой локации в значение 1. Включает так называемый режим отладки. В этом режиме не проверяется идентификатор игры при загрузке состояния игры. Таким образом сохранения от старых версий игры будут работать и в новой.

	$onnewloc
		-	устанваливается на  стартовой локации в значение 'onNewLoc'. Имя локации, обрабатывающей событие перехода на новую локацию.

	$onobjsel
		-	устанваливается на  стартовой локации в значение 'onObjSel'. Имя локации, обрабатывающей событие выделения предмета в окне инвентаря.

	$ongsave
		-	устанваливается на  стартовой локации в значение 'onGameSave'. Имя локации, обрабатывающей событие сохранения состояния игры.

	$ongload
		-	устанваливается на  стартовой локации в значение 'onGameLoad'. Имя локации, обрабатывающей событие загрузки состояния игры.

	$usercom
		-	устанваливается на  стартовой локации в значение 'uc'. Имя локации, обрабатывающей событие ввода текста в строку ввода (командную строку, поле ввода).

	nosave
		-	устанавливается локацией обработчиком 'onNewLoc' на локациях смерти в значение 1. Сохранение игры в этом случае становится невозможным.